from enum import Enum

_africa = [
    "DZ", "DZA",
    "AO", "AGO",
    "BJ", "BEN",
    "BW", "BWA",
    "BF", "BFA",
    "BI", "BDI",
    "CM", "CMR",
    "CV", "CPV",
    "CF", "CAF",
    "TD", "TCD",
    "KM", "COM",
    "CG", "COG",
    "CD", "COD",
    "CI", "CIV",
    "DJ", "DJI",
    "EG", "EGY",
    "GQ", "GNQ",
    "ER", "ERI",
    "ET", "ETH",
    "GA", "GAB",
    "GM", "GMB",
    "GH", "GHA",
    "GN", "GIN",
    "GW", "GNB",
    "KE", "KEN",
    "LS", "LSO",
    "LR", "LBR",
    "LY", "LBY",
    "MG", "MDG",
    "MW", "MWI",
    "ML", "MLI",
    "MR", "MRT",
    "MU", "MUS",
    "YT", "MYT",
    "MA", "MAR",
    "MZ", "MOZ",
    "NA", "NAM",
    "NE", "NER",
    "NG", "NGA",
    "RE", "REU",
    "RW", "RWA",
    "SH", "SHN",
    "ST", "STP",
    "SN", "SEN",
    "SC", "SYC",
    "SL", "SLE",
    "SO", "SOM",
    "ZA", "ZAF",
    "SS", "SSD",
    "SD", "SDN",
    "SZ", "SWZ",
    "TZ", "TZA",
    "TG", "TGO",
    "TN", "TUN",
    "UG", "UGA",
    "EH", "ESH",
    "ZM", "ZMB",
    "ZW", "ZWE"
]

_antartica = [
    "AQ", "ATA",
    "BV", "BVT",
    "TF", "ATF",
    "HM", "HMD",
    "GS", "SGS",
]

_asia = [
    "AF", "AFG",
    "AZ", "AZE",
    "BH", "BHR",
    "BD", "BGD",
    "BT", "BTN",
    "IO", "IOT",
    "BN", "BRN",
    "KH", "KHM",
    "CN", "CHN",
    "CX", "CXR",
    "CC", "CCK",
    "CY", "CYP",
    "GE", "GEO",
    "HK", "HKG",
    "IN", "IND",
    "ID", "IDN",
    "IR", "IRN",
    "IQ", "IRQ",
    "IL", "ISR",
    "JP", "JPN",
    "JO", "JOR",
    "KZ", "KAZ",
    "KP", "PRK",
    "KR", "KOR",
    "KW", "KWT",
    "KG", "KGZ",
    "LA", "LAO",
    "LB", "LBN",
    "MO", "MAC",
    "MY", "MYS",
    "MV", "MDV",
    "MN", "MNG",
    "MM", "MMR",
    "NP", "NPL",
    "OM", "OMN",
    "PK", "PAK",
    "PS", "PSE",
    "PH", "PHL",
    "QA", "QAT",
    "SA", "SAU",
    "SG", "SGP",
    "LK", "LKA",
    "SY", "SYR",
    "TW", "TWN",
    "TJ", "TJK",
    "TH", "THA",
    "TL", "TLS",
    "TR", "TUR",
    "TM", "TKM",
    "AE", "ARE",
    "UZ", "UZB",
    "VN", "VNM",
    "YE", "YEM",
]

_europe = [
    "AX", "ALA",
    "AL", "ALB",
    "AD", "AND",
    "AM", "ARM",
    "AT", "AUT",
    "BY", "BLR",
    "BE", "BEL",
    "BA", "BIH",
    "BG", "BGR",
    "HR", "HRV",
    "CZ", "CZE",
    "DK", "DNK",
    "EE", "EST",
    "FO", "FRO",
    "FI", "FIN",
    "FR", "FRA",
    "DE", "DEU",
    "GI", "GIB",
    "GR", "GRC",
    "GG", "GGY",
    "VA", "VAT",
    "HU", "HUN",
    "IS", "ISL",
    "IE", "IRL",
    "IM", "IMN",
    "IT", "ITA",
    "JE", "JEY",
    "LV", "LVA",
    "LI", "LIE",
    "LT", "LTU",
    "LU", "LUX",
    "MK", "MKD",
    "MT", "MLT",
    "MD", "MDA",
    "MC", "MCO",
    "ME", "MNE",
    "NL", "NLD",
    "NO", "NOR",
    "PL", "POL",
    "PT", "PRT",
    "RO", "ROU",
    "RU", "RUS",
    "SM", "SMR",
    "RS", "SRB",
    "SK", "SVK",
    "SI", "SVN",
    "ES", "ESP",
    "SJ", "SJM",
    "SE", "SWE",
    "CH", "CHE",
    "UA", "UKR",
    "GB", "GBR",
]

_north_america = [
    "AI", "AIA",
    "AW", "ABW",
    "BQ", "BES",
    "CU", "CUB",
    "CW", "CUW",
    "DM", "DMA",
    "DO", "DOM",
    "SV", "SLV",
    "GL", "GRL",
    "GD", "GRD",
    "GP", "GLP",
    "GT", "GTM",
    "HT", "HTI",
    "HN", "HND",
    "JM", "JAM",
    "MQ", "MTQ",
    "MX", "MEX",
    "MS", "MSR",
    "AN", "ANT",
    "NI", "NIC",
    "PA", "PAN",
    "PR", "PRI",
    "BL", "BLM",
    "KN", "KNA",
    "LC", "LCA",
    "MF", "MAF",
    "PM", "SPM",
    "VC", "VCT",
    "SX", "SXM",
    "TT", "TTO",
    "TC", "TCA",
    "UM", "UMI",
    "US", "USA",
    "VI", "VIR",
]

_south_america = [
    "AR", "ARG",
    "BO", "BOL",
    "BR", "BRA",
    "CL", "CHL",
    "CO", "COL",
    "EC", "ECU",
    "FK", "FLK",
    "GF", "GUF",
    "GY", "GUY",
    "PY", "PRY",
    "PE", "PER",
    "SR", "SUR",
    "UY", "URY",
    "VE", "VEN",
]

_oceania = [
    "AS", "ASM",
    "AU", "AUS",
    "CK", "COK",
    "FJ", "FJI",
    "PF", "PYF",
    "GU", "GUM",
    "KI", "KIR",
    "MH", "MHL",
    "FM", "FSM",
    "NR", "NRU",
    "NC", "NCL",
    "NZ", "NZL",
    "NU", "NIU",
    "NF", "NFK",
    "MP", "MNP",
    "PW", "PLW",
    "PG", "PNG",
    "PN", "PCN",
    "WS", "WSM",
    "SB", "SLB",
    "TK", "TKL",
    "TO", "TON",
    "TV", "TUV",
    "UM", "UMI",
    "VU", "VUT",
    "WF", "WLF",
]


class Continent(Enum):
    ANTARTICA = 0
    AFRICA = 1
    EUROPE = 2
    ASIA = 3
    OCEANIA = 4
    NORTH_AMERICA = 5
    SOUTH_AMERICA = 6


continents = [
    _antartica,
    _africa,
    _europe,
    _asia,
    _oceania,
    _north_america,
    _south_america
]

continents_countries = {
    Continent.ANTARTICA: _antartica,
    Continent.AFRICA: _africa,
    Continent.EUROPE: _europe,
    Continent.ASIA: _asia,
    Continent.OCEANIA: _oceania,
    Continent.NORTH_AMERICA: _north_america,
    Continent.SOUTH_AMERICA: _south_america
}